//
//  UIDevice+Platform.m
//  Bango
//
//  Based on code from https://gist.github.com/1323251s
//

#import "UIDevice+Platform.h"
#include <sys/types.h>
#include <sys/sysctl.h>

@implementation UIDevice (Platform)

@dynamic platform;
@dynamic humanReadablePlatform;

- (NSString *) platform {
    size_t size;
    sysctlbyname("hw.machine", NULL, &size, NULL, 0);
    char *machine = malloc(size);
    sysctlbyname("hw.machine", machine, &size, NULL, 0);
    NSString *platform = [NSString stringWithUTF8String:machine];
    free(machine);
    return platform;
}

- (NSString *) humanReadablePlatform {
    NSString *platform = self.platform;
    
    if ([platform isEqualToString:@"iPhone1,1"])    return @"iPhone";
    if ([platform isEqualToString:@"iPhone1,2"])    return @"iPhone 3G";
    if ([platform isEqualToString:@"iPhone2,1"])    return @"iPhone 3GS";
    if ([platform isEqualToString:@"iPhone3,1"])    return @"iPhone 4";
    if ([platform isEqualToString:@"iPhone3,3"])    return @"Verizon iPhone 4";
    if ([platform isEqualToString:@"iPhone4,1"])    return @"iPhone 4S";
    if ([platform isEqualToString:@"iPhone5,1"])    return @"iPhone 5 (GSM)";
    if ([platform isEqualToString:@"iPhone5,2"])    return @"iPhone 5 (CDMA)";
    
    if ([platform isEqualToString:@"iPod1,1"])      return @"iPod Touch 1st Gen";
    if ([platform isEqualToString:@"iPod2,1"])      return @"iPod Touch 2nd Gen";
    if ([platform isEqualToString:@"iPod3,1"])      return @"iPod Touch 3rd Gen";
    if ([platform isEqualToString:@"iPod4,1"])      return @"iPod Touch 4th Gen";
    if ([platform isEqualToString:@"iPod5,1"])      return @"iPod Touch 5th Gen";
    
    if ([platform isEqualToString:@"iPad1,1"])      return @"iPad";
    if ([platform isEqualToString:@"iPad2,1"])      return @"iPad 2 (WiFi) Original";
    if ([platform isEqualToString:@"iPad2,2"])      return @"iPad 2 (GSM)";
    if ([platform isEqualToString:@"iPad2,3"])      return @"iPad 2 (CDMA)";
    if ([platform isEqualToString:@"iPad2,4"])      return @"iPad 2 (WiFi) Current";
    if ([platform isEqualToString:@"iPad2,5"])      return @"iPad Mini";
    if ([platform isEqualToString:@"iPad2,6"])      return @"iPad 2 (GSM)";
    
    if ([platform isEqualToString:@"iPad3,1"])      return @"iPad 3 (WiFi)";
    if ([platform isEqualToString:@"iPad3,2"])      return @"iPad 3 (CDMA)";
    if ([platform isEqualToString:@"iPad3,3"])      return @"iPad 3 (GSM)";
    if ([platform isEqualToString:@"iPad3,4"])      return @"iPad 4 (WiFi)";
    
    if ([platform isEqualToString:@"i386"])         return @"Simulator";
    if ([platform isEqualToString:@"x86_64"])       return @"Simulator";
    
    return platform;
}

// See http://www.useragentstring.com/pages/Safari/
-(NSString *) userAgentString
{
    NSString *template      = @"Mozilla/5.0 (%@; CPU iPhone OS %@ like Mac OS X) AppleWebKit/%@ (KHTML, like Gecko) Mobile/%@";
    NSString *platform      = ([self.platform hasPrefix:@"iPad"] ? @"iPad" : ([self.platform hasPrefix:@"iPod"] ? @"iPod" : @"iPhone"));
    NSString *version       = [[self.systemVersion componentsSeparatedByString:@"."] componentsJoinedByString:@"_"];
    NSString *webKit        = ([version hasPrefix:@"6"] ? @"536.26" : ([version hasPrefix:@"5"] ? @"534.46" : @"533.17.9"));
    NSString *buildNumber   = ([version hasPrefix:@"6"] ? @"10A525" : ([version hasPrefix:@"5"] ? @"9B176" : ([version hasPrefix:@"4_3"] ? @"8F190" : @"8C148")));
    return [NSString stringWithFormat:template,platform,version,webKit,buildNumber];
}

@end
